﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static 战斗系统原型.角色;

namespace 战斗系统原型.数值处理.战斗
{
    public static class 默认数值计算 
    {
        
        public static void 物理攻击(角色 攻击角色 , 角色 被攻击角色, 战场属性 战场)
        {
            Random 随机攻击数值 = new Random();
            var 最终攻击数值 = 随机攻击数值.Next((int)攻击角色.物攻最低, (int)攻击角色.物攻最高);
            战场.日志.Add($"{攻击角色.角色名称} 攻击了 {被攻击角色.角色名称} ！");
            被攻击角色.被物理攻击(攻击角色,被攻击角色, 战场, 攻击属性.物理, 最终攻击数值);
        }

        public static void 被物理攻击(角色 攻击角色,角色 被攻击角色, 战场属性 战场, 攻击属性 属性, float 攻击数值)
        {
            var 物理防御力 = 被攻击角色.物防力 + 被攻击角色.物防力附加;
            float 最终造成伤害 = 0;
            if (物理防御力 != 0) { 最终造成伤害 = (int)Math.Ceiling(攻击数值 / 物理防御力); }
            else { 最终造成伤害 = (int)Math.Ceiling(攻击数值); }
            战斗数值计算.效果链路.计算伤害链路(被攻击角色,属性, (int)最终造成伤害);
            被攻击角色.生命值 -= (int)最终造成伤害;
            if (被攻击角色.生命值 < 0) { 被攻击角色.生命值 = 0; }
            战场.日志.Add($"{被攻击角色.角色名称} 被造成了{最终造成伤害}点物理伤害 ！");
            被攻击角色.检测角色死亡(被攻击角色,战场);
        }

        public static void 检测角色死亡(角色 角色,战场属性 战场)
        {
            if (角色.生命值 <= 0)
            {
                角色.角色状态 = 状态.濒死;
                if (战场.队伍数据 == null) { return; }
                战场.重新计算行动!(战场, 战场.队伍数据);
                战场.日志.Add($"{角色.角色名称} 进入濒死状态，无法行动");
            }
        }

    }
}
